package com.zhao.Util;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.List;
/**
 * @作用: 文件处理类 
 * @作者: syp 
 * @时间: 2019-4-16 15:26:27 
 */
public class FileTools {
	private String fFname = null;
	List<String> fileList = new ArrayList<String>();
	public String getFileName(String cfgFilename) {
		if (this.fFname == null) {
			String str[] = cfgFilename.split("/");
			String filename = str[str.length - 1];
			this.fFname = filename;
		}
 
		return this.fFname;
	}
 
	// 写文件
	public static int writeFile(String fileName, byte[] content) {
 
		System.out.println("开始写文件:[" + fileName + "]");
 
		File file = new File(fileName);
		File fileparent = file.getParentFile();
		if (!fileparent.exists()) {
			System.out.println("文件夹不存在，创建该目录");
			fileparent.mkdirs();
		}
		FileOutputStream os = null;
		try {
			os = new FileOutputStream(fileName);
			os.write(content);
			os.flush();
 
		} catch (Exception e) {
			System.out.println("写文件:[" + fileName + "]异常，异常信息为:["
					+ e.getMessage() + "]");
			return -1;
		} finally {
			try {
				if (null != os)
					os.close();
			} catch (IOException e) {
			}
		}
		os = null;
		System.out.println("写文件:[" + fileName + "]完成!");
		return 0;
	}
 
	// 读文件
	public static byte[] readFile(String fileName) {
		FileInputStream fis = null;
		System.out.println("开始读文件:[" + fileName + "]");
		byte[] buffer = null;
		try {
			fis = new FileInputStream(fileName);
			buffer = new byte[fis.available()];
			fis.read(buffer);
 
		} catch (Exception e) {
			System.out.println("读文件[" + fileName + "]失败 " + e.toString());
		} finally {
			try {
				if (null != fis)
					fis.close();
			} catch (IOException e) {
			}
		}
		fis = null;
		System.out.println("读文件[" + fileName + "]成功");
		System.out.println("文件[" + fileName + "]转为字节数组");
		return buffer;
	}
	/*
	 * 读取文件（可设置编码方式）
	 * @return 文件内容
	 */
	public static String ReadFileContent(String filePath){
		File file = new File(filePath);
		// BufferedReader br = new BufferedReader(new FileReader(file));
		BufferedReader br=null;
		try {
			br = new BufferedReader(new InputStreamReader(
					new FileInputStream(file), "UTF-8"));
		} catch (UnsupportedEncodingException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		} catch (FileNotFoundException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
		String str = null;
		StringBuffer Buff = new StringBuffer();
		try {
			while ((str = br.readLine()) != null) {
				Buff.append(str + "\r\n");
			}
		} catch (IOException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
		return Buff.toString();
	}
 
	public List<String> getFiles(String filePath) {
		System.out.println("开始遍历["+filePath+"]目录下的文件");
		//定义存放文件名的list集合
		
		
		//文件主目录
		File root = new File(filePath);
		
		//读出目录下所有文件
		File[] files = root.listFiles();
		if(files==null||files.length==0)
		{
			System.out.println("["+filePath+"]目录下无文件，不继续后续操作");
			return null;
		}
		//开始遍历文件并判断是否为文件目录		
		for (File file : files) {
		
			// 判断是否文件夹
			if (file.isDirectory()) {
			
				// 递归调用
				getFiles(file.getAbsolutePath());
				
			} else {
				
				// 否则，放入文件集合
				fileList.add(filePath+File.separator+file.getName());
				System.out.println(file.getName());
			}
		}
		System.out.println("["+filePath+"]目录遍历完成，里面包括["+fileList.size()+"]个文件");
		return fileList;
	}
	/**
	 * 删除单个文件
	 * @param   sPath    被删除文件的文件名
	 * @return 单个文件删除成功返回true，否则返回false
	 */
	public static boolean deleteFile(String sPath) {
		boolean flag = false;
		File file = new File(sPath);
		// 路径为文件且不为空则进行删除
		if (file.isFile() && file.exists()) {
			file.delete();
			flag = true;
		}
		return flag;
	}
	/**
	 * 删除目录（文件夹）以及目录下的文件
	 * @param   sPath 被删除目录的文件路径
	 * @return  目录删除成功返回true，否则返回false
	 */
	public static boolean deleteDirectory(String sPath) {
		//如果sPath不以文件分隔符结尾，自动添加文件分隔符
		if (!sPath.endsWith(File.separator)) {
			sPath = sPath + File.separator;
		}
		File dirFile = new File(sPath);
		//如果dir对应的文件不存在，或者不是一个目录，则退出
		if (!dirFile.exists() || !dirFile.isDirectory()) {
			return false;
		}
		boolean flag = true;
		//删除文件夹下的所有文件(包括子目录)
		File[] files = dirFile.listFiles();
		for (int i = 0; i < files.length; i++) {
			//删除子文件
			if (files[i].isFile()) {
				flag = deleteFile(files[i].getAbsolutePath());
				if (!flag) break;
			} //删除子目录
			else {
				flag = deleteDirectory(files[i].getAbsolutePath());
				if (!flag) break;
			}
		}
		if (!flag) return false;
		//删除当前目录
		if (dirFile.delete()) {
			return true;
		} else {
			return false;
		}
	}
 
	public static void main(String [] agrs)
	{
		String filePath = "C:\\Users\\Mrzhao\\Desktop\\s.txt";
		FileTools fileTools = new FileTools();
		String fileContent = fileTools.ReadFileContent(filePath);
		System.out.println(fileContent);
	}
}